import { defineStore } from 'pinia';
import router from '../router';
import { UserApi } from '@/api/user.js'
import { AuthApi } from '@/api/auth.js'

/**
* 用户认证状态管理库
* 负责处理用户登录、注册、注销及个人信息管理
*/
export const useAuthStore = defineStore('auth', {
    state: () => ({
        // 当前登录用户信息（未登录时为null）
        currentUser: null,
        // 认证令牌（用于API请求）
        token: '',
        menuList: [],
        permissions: [],
        isAuthenticated: false,
        hasLoadedDynamicRoutes: false,
    }),

    actions: {
        /**
         * 用户登录方法
         * @param {Object} credentials - 登录凭证 {phone, password, code}
         * @param {string} method - 登录方式: 
         'password'/'sms'/'wechat'/'alipay'
         */
        async login(user) {

            const result = await UserApi.login(user)
            const result2= await AuthApi.getAuthInfo()

            // 2. 保存登录状态
            this.currentUser = result.data.user;
            this.token = result.data.token;
            this.isAuthenticated = true;

            this.menuList = result2.data.menuList;

            router.push('/home');
        },

        /**
         * 用户注销方法
         */
        logout() {
            // 1. 清除状态
            this.currentUser = null;
            this.token = null;

            // 2. 清除本地存储
            // localStorage.removeItem('authToken');
            this.isAuthenticated = false
            this.hasLoadedDynamicRoutes = false
            // 3. 重定向到登录页
            router.push('/login');
        },
        isLoggedIn() {
            return this.isAuthenticated
        },

        /**
         * 更新用户个人信息
         * @param {Object} updates - 需要更新的字段 {name, avatar}
         */
        async updateProfile(updates) {
            // 1. 调用API更新
            const response = await fetch('/api/user/profile', {
                method: 'PATCH',
                headers: {
                    'Content-Type': 'application/json',
                    'Authorization': `Bearer ${this.token}`
                },
                body: JSON.stringify(updates)
            });

            // 2. 更新本地状态（如果currentUser存在）
            if (this.currentUser) {
                this.currentUser = { ...this.currentUser, ...updates };
            }
        },

        /**
         * 发送短信验证码（用于注册/登录）
         * @param {string} phone - 手机号码
         * @param {string} type - 验证码类型：'login'/'register'
         */
        async sendSmsCode(phone, type) {
            await fetch('/api/sms/send', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ phone, type })
            });
        },

        /**
         * 律师注册方法（包含资质认证）
         * @param {Object} data - 注册信息
         * @param {File} licenseFile - 律师执照文件
         */
        async registerLawyer(data, licenseFile) {
            // 创建表单数据
            const formData = new FormData();
            formData.append('license', licenseFile);

            // 添加其他数据
            for (const key in data) {
                formData.append(key, data[key]);
            }

            // 发送注册请求
            const response = await fetch('/api/register/lawyer', {
                method: 'POST',
                body: formData
            });

            const result = await response.json();
            // 注册成功后自动登录
            if (result.success) {
                this.login({
                    phone: data.phone,
                    password: data.password
                }, 'password');
            }
        }
    },
    /**
     * 律师注册方法（包含资质认证）
     * @param {Object} data - 注册信息
     */
    async registerLawyer(data) {
        try {
            const response = await UserApi.registerLawyer(data);
            if (response.success) {
                ElMessage.success('注册成功，请等待审核');
                return true;
            }
        } catch (error) {
            ElMessage.error(error.message || '注册失败');
            return false;
        }
    },
    getters: {
        /**
         * 检查用户是否已登录
         */
        // isLoggedIn(state) {
        //     return !!state.currentUser;
        // },

        /**
         * 检查当前用户是否为律师
         */
        isLawyer(state) {
            return state.currentUser?.type === 'lawyer';
        },

        /**
         * 获取用户头像（带默认头像）
         */
        userAvatar(state) {
            return state.currentUser?.avatar || '/default-avatar.png';
        }
    }
});